package server.util.mod;

import server.server.Server;
import server.server.User;

public interface ModBase {
    // 返回监听的指令字符串
    String listenStr();

    // 执行指令，用指令空格后带的字符串作为参数, args[0]固定为监听字符串，sender为发送命令的user对象
    void exec(String[] args, Server server, User sender);

    // 返回命令帮助（以多行的形式返回字符串）
    /*
    例：
    
    模组的作用
    /example arg1 : 参数1描述
    /example arg2 <arg21> : 参数2描述，参数21描述
    ...

    */
    default String helper() {
        return "";
    }

    /*
    默认监听事件：（从上之下）
    用户连接事件
    用户断开连接事件
    接收到来自用户的消息事件
    
    返回值说明
    返回真表示该事件有效，不拦截
    返回假表示将该事件作废，拦截该事件
    */
    default boolean onUserConnected(Server server, User user) {
        return true;
    }
    
    default boolean onUserDisconnected(Server server, User user) {
        return true;
    }
    
    default boolean onUserMsgReceived(String msg, Server server, User user) {
        return true;
    }

    int CONNECTED    = 0b001;
    int DISCONNECTED = 0b010;
    int RECEIVED     = 0b100;
    
    //事件注册器 返回要监听的事件
    /*
    例：
    
    return CONNECTED | RECEIVED;
    监听连接和接受消息事件
    */
    default int eventRegister() {
        return 0;
    }
}